// 知识点1：因为成员指针不是可调用对象，所以我们不能直接将一个指向成员函数的指针传递给算法

// auto p = &string::empty;//string类的empty()函数的指针p
// find_if(vec.begin()，vec.end()，p);//该算法需要传入一个函数，而我们传入的是指针
// 知识点2：要想通过成员指针调用函数，必须使用->*运算符

// 知识点3：若想从指向成员函数的指针获取可调用对象的一种方法是使用标准库模版function，头文件为functional

// function <bool (const string&)> fcn =
// &string::empty;//empty()是一个接受string参数并返回bool值的函数
// find_if(vec.begin()，vec.end()，fcn);//正确
// 知识点4：标准库功能mem_fn让编译器负责推断成员的类型

// find_if(vec.begin()，vec.end()，mem_fn(&string::empty));//mem_fn会生成一个可调用对象
// 知识点5：bind函数也可以从成员函数生成一个可调用对象

// find_if(vec.begin()，vec.end()，bind(&string::empty,_1));//bind会生成一个可调用对象,第一个实参既可以是指针也可以是引用

// 答案：
// 议，转载请附上原文出处链接及本声明。
// 原文链接：https://blog.csdn.net/misayaaaaa/article/details/64920912
/***************************************************************************
 *  @file       main.cpp
 *  @author     MISAYAONE
 *  @date       22  March 2017
 *  @remark     22  March 2017
 ***************************************************************************/

#include <algorithm>  //count_if头文件
#include <functional>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(int argc, char** argv) {
  vector<string> vec;
  vec.push_back("123");
  vec.push_back("");
  // auto p = &string::empty();//生成指针

  // 	function<bool (const string&)> p = &string::empty;
  // 	size_t _sum = count_if(vec.begin(),vec.end(),p);

  /*size_t _sum = count_if(vec.begin(),vec.end(),men_fn(&string::empty));*/  // C++11新标准

  size_t _sum = count_if(
      vec.begin(), vec.end(),
      bind(&string::empty, std::placeholders::_1));  //占位符需要命名空间
  cout << _sum << endl;
  cin.get();
  return 0;
}